export const LABEL_DEFAULT_TEXT = '新建节点'

export const RendererType = {
  Canvas: 'canvas',
  Svg: 'svg'
}

export const ItemType = {
  Node: 'node',
  Edge: 'edge'
}

export const ItemState = {
  Active: 'active',
  Selected: 'selected',
  HighLight: 'highLight',
  Error: 'error'
}

export const GraphMode = {
  Default: 'default',
  AddNode: 'addNode',
  Readonly: 'readonly'
}

export const GraphState = {
  NodeSelected: 'nodeSelected',
  EdgeSelected: 'edgeSelected',
  MultiSelected: 'multiSelected',
  CanvasSelected: 'canvasSelected'
}

export const LabelState = {
  Hide: 'hide',
  Show: 'show'
}

export const EditorEvent = {
  onAfterEditorReady: 'onAfterEditorReady',
  /** 调用命令之前触发 */
  onBeforeExecuteCommand: 'onBeforeExecuteCommand',
  /** 调用命令之后触发 */
  onAfterExecuteCommand: 'onAfterExecuteCommand',
  /** 改变画面状态触发 */
  onGraphStateChange: 'onGraphStateChange',
  /** 改变标签状态触发 */
  onLabelStateChange: 'onLabelStateChange'
}

export const EditorBuiltInCommand = {
  /** 撤销 */
  Undo: 'Undo',
  /** 重做 */
  Redo: 'Redo',
  /** 添加 */
  Add: 'Add',
  /** 更新 */
  Update: 'Update',
  /** 删除 */
  Remove: 'Remove',
  /** 复制 */
  Copy: 'Copy',
  /** 粘贴 */
  Paste: 'Paste',
  /** 粘贴到这里 */
  PasteHere: 'PasteHere',
  /** 放大 */
  ZoomIn: 'ZoomIn',
  /** 缩小 */
  ZoomOut: 'ZoomOut',
  /** 插入主题 */
  Topic: 'Topic',
  /** 插入子主题 */
  Subtopic: 'Subtopic',
  /** 收起 */
  Fold: 'Fold',
  /** 展开 */
  Unfold: 'Unfold'
}

export const GraphCommonEvent = {
  /** 单击鼠标左键或者按下回车键时触发 */
  onClick: 'click',
  /** 双击鼠标左键时触发 */
  onDoubleClick: 'dblclick',
  /** 鼠标移入元素范围内触发，该事件不冒泡，即鼠标移到其后代元素上时不会触发 */
  onMouseEnter: 'mouseenter',
  /** 鼠标在元素内部移到时不断触发，不能通过键盘触发 */
  onMouseMove: 'mousemove',
  /** 鼠标移出目标元素后触发 */
  onMouseOut: 'mouseout',
  /** 鼠标移入目标元素上方，鼠标移到其后代元素上时会触发 */
  onMouseOver: 'mouseover',
  /** 鼠标移出元素范围时触发，该事件不冒泡，即鼠标移到其后代元素时不会触发 */
  onMouseLeave: 'mouseleave',
  /** 鼠标按钮被按下（左键或者右键）时触发，不能通过键盘触发 */
  onMouseDown: 'mousedown',
  /** 鼠标按钮被释放弹起时触发，不能通过键盘触发 */
  onMouseUp: 'mouseup',
  /** 用户右击鼠标时触发并打开上下文菜单 */
  onContextMenu: 'contextmenu',
  /** 当拖拽元素开始被拖拽的时候触发的事件，此事件作用在被拖曳元素上 */
  onDragStart: 'dragstart',
  /** 当拖拽元素在拖动过程中时触发的事件，此事件作用于被拖拽元素上 */
  onDrag: 'drag',
  /** 当拖拽完成后触发的事件，此事件作用在被拖曳元素上 */
  onDragEnd: 'dragend',
  /** 当拖曳元素进入目标元素的时候触发的事件，此事件作用在目标元素上 */
  onDragEnter: 'dragenter',
  /** 当拖曳元素离开目标元素的时候触发的事件，此事件作用在目标元素上 */
  onDragLeave: 'dragleave',
  /** 被拖拽的元素在目标元素上同时鼠标放开触发的事件，此事件作用在目标元素上 */
  onDrop: 'drop',
  /** 按下键盘键触发该事件 */
  onKeyDown: 'keydown',
  /** 释放键盘键触发该事件 */
  onKeyUp: 'keyup',
  /** 当手指触摸屏幕时候触发，即使已经有一个手指放在屏幕上也会触发 */
  onTouchStart: 'touchstart',
  /** 当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间，调用 preventDefault() 事件可以阻止滚动。 */
  onTouchMove: 'touchmove',
  /** 当手指从屏幕上离开的时候触发 */
  onTouchEnd: 'touchend'
}

export const GraphNodeEvent = {
  /** 鼠标左键单击节点时触发 */
  onNodeClick: 'node:click',
  /** 鼠标双击左键节点时触发 */
  onNodeDoubleClick: 'node:dblclick',
  /** 鼠标移入节点时触发 */
  onNodeMouseEnter: 'node:mouseenter',
  /** 鼠标在节点内部移到时不断触发，不能通过键盘触发 */
  onNodeMouseMove: 'node:mousemove',
  /** 鼠标移出节点后触发 */
  onNodeMouseOut: 'node:mouseout',
  /** 鼠标移入节点上方时触发 */
  onNodeMouseOver: 'node:mouseover',
  /** 鼠标移出节点时触发 */
  onNodeMouseLeave: 'node:mouseleave',
  /** 鼠标按钮在节点上按下（左键或者右键）时触发，不能通过键盘触发 */
  onNodeMouseDown: 'node:mousedown',
  /** 节点上按下的鼠标按钮被释放弹起时触发，不能通过键盘触发 */
  onNodeMouseUp: 'node:mouseup',
  /** 用户在节点上右击鼠标时触发并打开右键菜单 */
  onNodeContextMenu: 'node:contextmenu',
  /** 当节点开始被拖拽的时候触发的事件，此事件作用在被拖曳节点上 */
  onNodeDragStart: 'node:dragstart',
  /** 当节点在拖动过程中时触发的事件，此事件作用于被拖拽节点上 */
  onNodeDrag: 'node:drag',
  /** 当拖拽完成后触发的事件，此事件作用在被拖曳节点上 */
  onNodeDragEnd: 'node:dragend',
  /** 当拖曳节点进入目标元素的时候触发的事件，此事件作用在目标元素上 */
  onNodeDragEnter: 'node:dragenter',
  /** 当拖曳节点离开目标元素的时候触发的事件，此事件作用在目标元素上 */
  onNodeDragLeave: 'node:dragleave',
  /** 被拖拽的节点在目标元素上同时鼠标放开触发的事件，此事件作用在目标元素上 */
  onNodeDrop: 'node:drop'
}

export const GraphEdgeEvent = {
  /** 鼠标左键单击边时触发 */
  onEdgeClick: 'edge:click',
  /** 鼠标双击左键边时触发 */
  onEdgeDoubleClick: 'edge:dblclick',
  /** 鼠标移入边时触发 */
  onEdgeMouseEnter: 'edge:mouseenter',
  /** 鼠标在边上移到时不断触发，不能通过键盘触发 */
  onEdgeMouseMove: 'edge:mousemove',
  /** 鼠标移出边后触发 */
  onEdgeMouseOut: 'edge:mouseout',
  /** 鼠标移入边上方时触发 */
  onEdgeMouseOver: 'edge:mouseover',
  /** 鼠标移出边时触发 */
  onEdgeMouseLeave: 'edge:mouseleave',
  /** 鼠标按钮在边上按下（左键或者右键）时触发，不能通过键盘触发 */
  onEdgeMouseDown: 'edge:mousedown',
  /** 边上按下的鼠标按钮被释放弹起时触发，不能通过键盘触发 */
  onEdgeMouseUp: 'edge:mouseup',
  /** 用户在边上右击鼠标时触发并打开右键菜单 */
  onEdgeContextMenu: 'edge:contextmenu'
}

export const GraphCanvasEvent = {
  /** 鼠标左键单击画布时触发 */
  onCanvasClick: 'canvas:click',
  /** 鼠标双击左键画布时触发 */
  onCanvasDoubleClick: 'canvas:dblclick',
  /** 鼠标移入画布时触发 */
  onCanvasMouseEnter: 'canvas:mouseenter',
  /** 鼠标在画布内部移到时不断触发，不能通过键盘触发 */
  onCanvasMouseMove: 'canvas:mousemove',
  /** 鼠标移出画布后触发 */
  onCanvasMouseOut: 'canvas:mouseout',
  /** 鼠标移入画布上方时触发 */
  onCanvasMouseOver: 'canvas:mouseover',
  /** 鼠标移出画布时触发 */
  onCanvasMouseLeave: 'canvas:mouseleave',
  /** 鼠标按钮在画布上按下（左键或者右键）时触发，不能通过键盘触发 */
  onCanvasMouseDown: 'canvas:mousedown',
  /** 画布上按下的鼠标按钮被释放弹起时触发，不能通过键盘触发 */
  onCanvasMouseUp: 'canvas:mouseup',
  /** 用户在画布上右击鼠标时触发并打开右键菜单 */
  onCanvasContextMenu: 'canvas:contextmenu',
  /** 当画布开始被拖拽的时候触发的事件，此事件作用在被拖曳画布上 */
  onCanvasDragStart: 'canvas:dragstart',
  /** 当画布在拖动过程中时触发的事件，此事件作用于被拖拽画布上 */
  onCanvasDrag: 'canvas:drag',
  /** 当拖拽完成后触发的事件，此事件作用在被拖曳画布上 */
  onCanvasDragEnd: 'canvas:dragend',
  /** 当拖曳画布进入目标元素的时候触发的事件，此事件作用在目标元素上 */
  onCanvasDragEnter: 'canvas:dragenter',
  /** 当拖曳画布离开目标元素的时候触发的事件，此事件作用在目标元素上 */
  onCanvasDragLeave: 'canvas:dragleave'
}

export const GraphCustomEvent = {
  /** 调用 add / addItem 方法之前触发 */
  onBeforeAddItem: 'beforeadditem',
  /** 调用 add / addItem 方法之后触发 */
  onAfterAddItem: 'afteradditem',
  /** 调用 remove / removeItem 方法之前触发 */
  onBeforeRemoveItem: 'beforeremoveitem',
  /** 调用 remove / removeItem 方法之后触发 */
  onAfterRemoveItem: 'afterremoveitem',
  /** 调用 update / updateItem 方法之前触发 */
  onBeforeUpdateItem: 'beforeupdateitem',
  /** 调用 update / updateItem 方法之后触发 */
  onAfterUpdateItem: 'afterupdateitem',
  /** 调用 showItem / hideItem 方法之前触发 */
  onBeforeItemVisibilityChange: 'beforeitemvisibilitychange',
  /** 调用 showItem / hideItem 方法之后触发 */
  onAfterItemVisibilityChange: 'afteritemvisibilitychange',
  /** 调用 setItemState 方法之前触发 */
  onBeforeItemStateChange: 'beforeitemstatechange',
  /** 调用 setItemState 方法之后触发 */
  onAfterItemStateChange: 'afteritemstatechange',
  /** 调用 refreshItem 方法之前触发 */
  onBeforeRefreshItem: 'beforerefreshitem',
  /** 调用 refreshItem 方法之后触发 */
  onAfterRefreshItem: 'afterrefreshitem',
  /** 调用 clearItemStates 方法之前触发 */
  onBeforeItemStatesClear: 'beforeitemstatesclear',
  /** 调用 clearItemStates 方法之后触发 */
  onAfterItemStatesClear: 'afteritemstatesclear',
  /** 布局前触发。调用 render 时会进行布局，因此 render 时会触发。或用户主动调用图的 layout 时触发 */
  onBeforeLayout: 'beforelayout',
  /** 布局完成后触发。调用 render 时会进行布局，因此 render 时布局完成后会触发。或用户主动调用图的 layout 时布局完成后触发 */
  onAfterLayout: 'afterlayout',
  /** 连线完成之前触发 */
  onBeforeConnect: 'beforeconnect',
  /** 连线完成之后触发 */
  onAfterConnect: 'afterconnect'
}
